package org.aj.common.web.file.util;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;


/**
 * description 此模块用到的工具类
 * author aj
 * date 2022/6/16 18:35
 */
public class DistributeFileUtils {


    /**
     * description  base64转字节数组
     * @param base64
     * @return: byte[]
     * @author: jcj
     * date : 2020/12/3 15:28
     */
    public static byte[] base64ToByte(String base64) {

        validateNonEmpty(base64,"base64");
        //判断头部是否传入了文件类型过来 data:image/png;base64,
        if(base64.contains(";base64,")){
            base64 = base64.substring(base64.indexOf(";base64,")+";base64,".length());
        }


        return Base64.decodeBase64(base64);
    }


    /**
     * description 转换成base64字符串
     * @param imgBytes
     * @author jcj
     * date  2021/4/19 19:37
     * @return java.lang.String
     */
    public static String bytesToBase64(byte[] imgBytes) {


        return Base64.encodeBase64String(imgBytes);
    }


    /**
     * description  从base64里面获取图片类型 前提是 base64前缀里面包含了
     * @param base64
     * @return: java.lang.String
     * @author: jcj
     * date : 2020/12/3 15:43
     */
    public static String getFileTypeFromBase64(String base64){
        validateNonEmpty(base64,"base64");
        if(base64.contains(";base64,") && base64.startsWith("data")){
            String  fileTyp = base64.substring("data".length()+1,base64.indexOf(";base64,"));
            return fileTyp;
        }

        return null;
    }


    public static void validateNonEmpty(String value,String args){
        if(StringUtils.isBlank(value)){
            throw new IllegalArgumentException(args+" must non-empty");
        }
    }





    /**
     * description  利用uuid生成图片名称
     * @author aj
     * date  2021/9/5 17:08
     * @param
     * @return java.lang.String
     */
    public static String generatePhotoName(){
        return UUID.randomUUID().toString().toUpperCase().replace("-", "");
    }

    /**
     * jdk的UUID生成随机的图片名,后缀名为.jpg
     * @param
     * @return
     */
    public static String generatePhotoNameAndSuffix() {
        return generatePhotoName()+".jpg";
    }

    /**
     * jdk的UUID生成随机的图片名带后缀
     * @param suffix  图片名后缀，如果为空则默认是.jpg
     * @return
     */
    public static String generatePhotoNameAndSuffix(String suffix) {
        if(StringUtils.isBlank(suffix))
            suffix = ".jpg";
        return UUID.randomUUID().toString().toUpperCase().replace("-", "")+suffix;
    }





    /**
     * 得到文件的后缀名
     * @param file
     * @return
     */
    public static String getSuffix(MultipartFile file){
        String filename = file.getOriginalFilename();
        String filleSuffix=filename.substring(filename.lastIndexOf(".")+1);

        /**
         *加入这段代码的含义是因为，目前前端的操作会部文件类型变成blob,然后导致获取文件后缀名的时候变成
         * blob
         */
        if("blob".equalsIgnoreCase(filleSuffix)){
            String contentType = file.getContentType();
            return contentType.split("/")[1];
        }
        return filleSuffix;
    }







}

